package com.itcz.maker.generator;

import cn.hutool.core.io.FileUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;

/**
 * 脚本生成器
 */
public class ScriptGenerator {
    public static void doGenerate(String outputPath, String jarPath) {
        // 直接写入脚本文件
        // Linux
        // #!/bin/bash
        // java -jar target/sharing-platform-basic-1.0-SNAPSHOT-jar-with-dependencies.jar "$@"
        StringBuilder sb = new StringBuilder();
        sb.append("#!/bin/bash").append("\n");
        // 由于字符串中"有二义性，故用"转义，表示打印"
        sb.append(String.format("java -jar %s \"$@\"", jarPath)).append("\n");
        // 利用Hutool工具包生成文件
        FileUtil.writeBytes(sb.toString().getBytes(StandardCharsets.UTF_8), outputPath);
        // 添加可执行权限（因为Linux系统创建脚本文件默认无可执行权限）
        // 因为Windows系统下执行命令会报错，故不抛出异常，而用try catch处理（但catch无处理）
        try {
            Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("rwxrwxrwx");
            Files.setPosixFilePermissions(Paths.get(outputPath), permissions);
        } catch (Exception e) {

        }

        // Windows
        // @echo off
        // java -jar target/sharing-platform-basic-1.0-SNAPSHOT-jar-with-dependencies.jar %*
        sb = new StringBuilder();
        sb.append("@echo off").append("\n");
        // 由于字符串中%有二义性，故用%转义，表示打印%
        sb.append(String.format("java -jar %s %%*", jarPath)).append("\n");
        // 利用Hutool工具包生成文件，但是Windows下的脚本文件必须加后缀名.bat
        FileUtil.writeBytes(sb.toString().getBytes(StandardCharsets.UTF_8), outputPath + ".bat");
    }
}
